package com.fzy.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * FastJson 工具类
 *
 * @author 冯赵杨
 * @date 2017年9月13日
 */
public class FastJsonUtil {
    private FastJsonUtil() {
    }

    private static final SerializeConfig config;

    private static final String dateFormat = "yyyy-MM-dd HH:mm:ss";

    static {
        config = new SerializeConfig();
        config.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
    }

    /**
     * 输出空值字段
     */
    private static final SerializerFeature[] features = {SerializerFeature.WriteMapNullValue,
            // list字段如果为null，输出为[]，而不是null
            SerializerFeature.WriteNullListAsEmpty,
            // 数值字段如果为null，输出为0，而不是null
            SerializerFeature.WriteNullNumberAsZero,
            // Boolean字段如果为null，输出为false，而不是null
            SerializerFeature.WriteNullBooleanAsFalse,
            // 字符类型字段如果为null，输出为""，而不是null
            SerializerFeature.WriteNullStringAsEmpty
    };


    /**
     * 将object转化为json
     */
    public static String toJson(Object object) {
        return JSON.toJSONString(object, config, features);
    }

    /**
     * 将object转化为json
     *
     * @author 冯赵杨
     * @date 2017年9月13日 下午6:50:08
     */
    public static String toJsonNoFeatures(Object object) {
        return JSON.toJSONString(object, config);
    }

    /**
     * 将map转化为json
     */
    public static String toJson(Map<String, Object> map) {
        return JSONObject.toJSONString(map);
    }

    /**
     * 将json转化为bean
     */
    public static <T> T toBean(String data, Class<T> clazz) {
        return JSON.parseObject(data, clazz);
    }

    /**
     * 将json转化为map
     */
    public static Map<String, Object> toMap(String s) {
        return JSONObject.parseObject(s);
    }

    /**
     * 将json转化为Array
     */
    public static <T> Object[] toArray(String data) {
        return toArray(data, null);
    }

    /**
     * 将json转化为Array
     */
    public static <T> Object[] toArray(String data, Class<T> clazz) {
        return JSON.parseArray(data, clazz).toArray();
    }

    /**
     * 将json转化为List
     */
    public static <T> List<T> toList(String data, Class<T> clazz) {
        return JSON.parseArray(data, clazz);
    }


}
